/* Die Klasse PLZ
 * 
 * Datei:  PLZ.java                          Autor:    Martin Fischer
 * Datum:  13.11:2011                        Version:  1.0
 *
 *
 */

package kommunikation;

import java.io.Serializable;

import GUI.Dashboard;
import kommunikation.Parser.*;


public class PLZ implements Serializable
{
  private static final long serialVersionUID = 8652469715272572533L;
  private String plz; 			/* die PLZ 			*/
  private Uebersetzung uebersetzung;


  /*
   * Der Konstruktor bekommt eine PLZ als Integerzahl uebergeben
   */
  public PLZ (String plz)
  {
    uebersetzung = new  Uebersetzung (Dashboard.
        verwendeteSprache ().toString ());
    if (!istGueltigePLZ (plz))
    {
      uebersetzung = new  Uebersetzung (Dashboard.
          verwendeteSprache ().toString ());
      //System.out.println ("ungueltige PLZ: "+ plz +" \n");
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FPLZP"));
    }
    else
    {
      this.plz = plz;
//      System.out.println ("PLZ wurde uebernommen \n");
    }
  }


  /*
   * PLZ mit neuem Wert setzen
   */
  public void setzePLZ (String plz)
  {
    if (!istGueltigePLZ (plz))
    {
//      System.out.println ("ungueltige PLZ \n");
      throw new UngueltigeEingabeAusnahme (
	  uebersetzung.lokal.gibUebersetzung ("FPLZP"));
    }
    else
    {
      this.plz = plz;
//      System.out.println ("PLZ wurde uebernommen \n");
    }
  }


  /*
   * liefert den Wert der PLZ als Int zurueck
   */
  public String gibPLZ ()
  {
    return plz;
  }


  /*
   * Ueberpuefe ob die PLZ einer gueltigen Schreibweise entspricht.
   */
  public boolean istGueltigePLZ (String zuPruefendePLZ)
  {
    PLZParser plzp = new PLZParser ();
    plzp.initialisieren (zuPruefendePLZ);

    /*
     * der Parder arbeitet solange bis sich die Maschine in eimem
     * Endzustand oder sich in einem Fehlerzustand befindet
     */
    while (!plzp.getAktuellenZusatnd ().istEndzustand ()
      && !plzp.istImFehlerzustand ())
    {
      /*
       * hier findet das Schrittweise ueberpruefen des Wortes statt
       */
      plzp.arbeiten ();
    }
    /*
     * wenn dich der Parser im Fehlerzustand befindet wird ein false
     * zurueckgegeben fuer nicht erkannt
     */
    if (plzp.istImFehlerzustand ())
    {
      return false;
    }
    /*
     * das Wort wurde erkannt
     */
    return true;
  }
}
